package models

import (
	"gorm.io/gorm"
	"order-srv/basic/inits"
	"time"
)

type Order struct {
	Id          uint64         `gorm:"column:id;type:bigint UNSIGNED;primaryKey;not null;" json:"id"`
	OrderNo     string         `gorm:"column:order_no;type:varchar(100);comment:订单号;default:NULL;" json:"order_no"`                                        // 订单号
	AddressId   int32          `gorm:"column:address_id;type:int;comment:地址id;default:NULL;" json:"address_id"`                                            // 地址id
	UserId      int32          `gorm:"column:user_id;type:int;comment:用户id;default:NULL;" json:"user_id"`                                                  // 用户id
	GoodsId     int32          `gorm:"column:goods_id;type:int;comment:商品id;default:NULL;" json:"goods_id"`                                                // 商品id
	GoodsNum    int32          `gorm:"column:goods_num;type:int;comment:购买商品的数量;default:NULL;" json:"goods_num"`                                           // 购买商品的数量
	GoodsName   string         `gorm:"column:goods_name;type:varchar(30);comment:商品名称;default:NULL;" json:"goods_name"`                                    // 商品名称
	GoodsPrice  int64          `gorm:"column:goods_price;type:bigint;comment:商品价格;default:NULL;" json:"goods_price"`                                       // 商品价格
	OrderNum    int32          `gorm:"column:order_num;type:int;comment:订单数量;default:NULL;" json:"order_num"`                                              // 订单数量
	OrderPrice  float64        `gorm:"column:order_price;type:decimal(10, 2);comment:订单价格;default:NULL;" json:"order_price"`                               // 订单价格
	Cause       string         `gorm:"column:cause;type:varchar(55);comment:申请说明;not null;" json:"cause"`                                                  // 申请说明
	SalesImg    string         `gorm:"column:sales_img;type:varchar(255);comment:退货照片;not null;" json:"sales_img"`                                         // 退货照片
	Status      int32          `gorm:"column:status;type:int;comment:申请类型:1仅退货 2退货退款 3换货;not null;" json:"status"`                                         // 申请类型:1仅退货 2退货退款 3换货
	SalesPrice  float32        `gorm:"column:sales_price;type:float(10, 2);comment:申请金额;not null;" json:"sales_price"`                                     // 申请金额
	SalesStatus int32          `gorm:"column:sales_status;type:int;comment:申请原因: 1:买多了 2:不想要了 3:质量问题 4:商家发错了 5:空包裹 6:其他原因 ;not null;" json:"sales_status"` // 申请原因: 1:买多了 2:不想要了 3:质量问题 4:商家发错了 5:空包裹 6:其他原因
	ShopStatus  int32          `gorm:"column:shop_status;type:int;comment:商家状态: 1:不同意退款 2:同意退款;not null;" json:"shop_status"`                              // 商家状态: 1:不同意退款 2:同意退款
	ShopType    int32          `gorm:"column:shop_type;type:int;comment:金额推回: 1:支付宝 2:微信;not null;" json:"shop_type"`                                      // 金额放回: 1:支付宝 2:微信
	PayCType    int32          `gorm:"column:pay_c_type;type:int;comment:支付方式：1：微信2：支付宝;default:NULL;" json:"pay_c_type"`                                  // 支付方式：1：微信2：支付宝
	PayStatus   int32          `gorm:"column:pay_status;type:int;comment:支付状态：1：已支付，2：未支付;default:NULL;" json:"pay_status"`                                // 支付状态：1：已支付，2：未支付
	OrderStatus int32          `gorm:"column:order_status;type:int;comment:订单状态;default:NULL;" json:"order_status"`                                        // 订单状态
	CreatedAt   time.Time      `gorm:"column:created_at;type:datetime(3);default:CURRENT_TIMESTAMP(3);" json:"created_at"`
	UpdatedAt   time.Time      `gorm:"column:updated_at;type:datetime(3);default:CURRENT_TIMESTAMP(3);" json:"updated_at"`
	DeletedAt   gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
}

func (o *Order) TableName() string {
	return "order"
}

// 创建订单
func (o *Order) Create() error {
	return inits.DB.Create(&o).Error
}

// 详情
func (o *Order) Detail() error {
	return inits.DB.Where("id = ?", o.Id).Find(&o).Error
}

// 根据id查询订单
func (o *Order) GetOrderById(orderId int) error {
	return inits.DB.Where("id = ?", orderId).Limit(1).Find(&o).Error
}

// 列表分页
func (o *Order) ListPage(page, pageSize int) (good []*Order, err error) {
	err = inits.DB.Where("goods_name like ?", "%"+o.GoodsName+"%").Scopes(Paginate(page, pageSize)).Find(&good).Error
	return
}
func Paginate(page, pageSize int) func(db *gorm.DB) *gorm.DB {
	return func(db *gorm.DB) *gorm.DB {
		if page <= 0 {
			page = 1
		}
		switch {
		case pageSize > 100:
			pageSize = 100
		case pageSize <= 0:
			pageSize = 10
		}
		offset := (page - 1) * pageSize
		return db.Offset(offset).Limit(pageSize)
	}
}

// 删除订购单
func (o *Order) DelOrder() error {
	return inits.DB.Delete(&o).Error
}

// 修改订单信息
func (o *Order) Update() error {
	return inits.DB.Where("id = ?", o.Id).Updates(&o).Error
}

// 查询订单物流
func (g *Order) OrderRetailLogistics() error {
	return inits.DB.Where("id = ?", g.Id).Find(&g).Error
}

// 获取订单Id
func (o *Order) DistributionGetOrderId() error {
	return inits.DB.First(&o).Error
}
